package com.example.config;
//
//import org.apache.ibatis.mapping.BoundSql;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.mapping.SqlSource;
//import org.apache.ibatis.plugin.Interceptor;
//import org.apache.ibatis.plugin.Intercepts;
//import org.apache.ibatis.plugin.Invocation;
//import org.apache.ibatis.plugin.Signature;
//import org.apache.ibatis.session.ResultHandler;
//import org.apache.ibatis.session.RowBounds;
//
//import java.util.Map;
//import java.util.Properties;
//import java.util.concurrent.Executor;
//
//@Intercepts({
//        @Signature(type= Executor.class, method="query",
//                args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
//})
//public class DynamicSqlInterceptor implements Interceptor {
//    @Override
//    public Object intercept(Invocation invocation) throws Throwable {
//        Object[] args = invocation.getArgs();
//        MappedStatement ms = (MappedStatement) args[0];
//        Object parameter = args[1];
//
//        // 从参数中获取SQL ID
//        if (parameter instanceof Map) {
//            Map<?, ?> paramMap = (Map<?, ?>) parameter;
//            String sqlId = (String) paramMap.get("sqlId");
//
//            if (sqlId != null) {
//                // 从数据库查询预存SQL
//                String dynamicSql = getSqlFromDatabase(sqlId);
//
//                // 创建新的BoundSql
//                BoundSql boundSql = new BoundSql(ms.getConfiguration(), dynamicSql,
//                        ms.getSqlSource().getBoundSql(parameter).getParameterMappings(), parameter);
//
//                // 替换MappedStatement中的SQL
//                MappedStatement newMs = copyFromMappedStatement(ms, new BoundSqlSqlSource(boundSql));
//                args[0] = newMs;
//            }
//        }
//
//        return invocation.proceed();
//    }
//
//    @Override
//    public Object plugin(Object o) {
//        return null;
//    }
//
//    @Override
//    public void setProperties(Properties properties) {
//
//    }
//
//    private String getSqlFromDatabase(String sqlId) {
//        // 这里实现从数据库查询SQL的逻辑
//        return "SELECT * FROM users WHERE id = #{id}"; // 示例
//    }
//
//    // 辅助方法：复制MappedStatement
//    private MappedStatement copyFromMappedStatement(MappedStatement ms, SqlSource newSqlSource) {
//        // 实现略...
//
//        return null;
//    }
//
//    public static class BoundSqlSqlSource implements SqlSource {
//        private BoundSql boundSql;
//        public BoundSqlSqlSource(BoundSql boundSql) {
//            this.boundSql = boundSql;
//        }
//        public BoundSql getBoundSql(Object parameterObject) {
//            return boundSql;
//        }
//    }
//}

